package entities;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import vo.CarritoVO;
import vo.ItemCarritoVO;

@Entity 
@Table(name="carritos")
public class CarritoCompra implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -5236484994312545347L;
	
	@Id
	@GeneratedValue(strategy= GenerationType.AUTO)
	private int id;
	@OneToMany(cascade=CascadeType.ALL)
	private List<ItemCarritoCompra> itemsCarrito;

	public List<ItemCarritoCompra> getItemsCarrito() {
		return itemsCarrito;
	}

	public void setItemsCarrito(List<ItemCarritoCompra> itemsCarrito) {
		this.itemsCarrito = itemsCarrito;
	}

	public CarritoCompra() {
		super();
		itemsCarrito = new ArrayList<ItemCarritoCompra>();
	}

	//********************** COMPORTAMIENTO ********************** 
	public void agregarArticulo(Articulo articulo, int cantidad){
	
		ItemCarritoCompra icc = new ItemCarritoCompra();
		
		icc.setArticulo(articulo);
		
		for(ItemCarritoCompra iccAux:itemsCarrito){
			if(iccAux.getArticulo().getCodigo() == articulo.getCodigo()){
				cantidad += iccAux.getCantidad();
				itemsCarrito.remove(iccAux);
				break;
			}
		}
		
		icc.setCantidad(cantidad);
		
		this.itemsCarrito.add(icc);
	
	}
	
	public void sacarArticulo(int codigo) {
		
		for(ItemCarritoCompra iccAux:itemsCarrito){
			if(iccAux.getArticulo().getCodigo() == codigo){
				itemsCarrito.remove(iccAux);
				break;
			}
		}
		
	}
	
	public double getPrecioTotal(){
		double total=0;
		for(ItemCarritoCompra i:this.itemsCarrito ){
			total =total+ i.getCantidad()*i.getArticulo().getPrecio();
		}
		return total;
	}

	public CarritoVO getVO() {
		
		CarritoVO resultado = new CarritoVO();
		List<ItemCarritoVO> items = new ArrayList<ItemCarritoVO>();
		
		for(ItemCarritoCompra icc : itemsCarrito){
			items.add(icc.getVO());
		}
		
		resultado.setItemsCarrito(items);
		
		return resultado;
	}

	public void cambiarCantidadArticulo(Articulo articulo, int cantidad) {
		
		ItemCarritoCompra icc = new ItemCarritoCompra();
		
		icc.setArticulo(articulo);
		
		for(ItemCarritoCompra iccAux:itemsCarrito){
			if(iccAux.getArticulo().getCodigo() == articulo.getCodigo()){
				itemsCarrito.remove(iccAux);
				break;
			}
		}
		
		icc.setCantidad(cantidad);
		
		this.itemsCarrito.add(icc);
		
	}

	//********************** COMPORTAMIENTO **********************

	
}